define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'item/index',
                    add_url: 'item/add',
                    edit_url: 'item/edit',
                    del_url: 'item/del',
                    multi_url: 'item/multi',
                    table: 'item',
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'grade',
                sortOrder: 'asc',
                pagination: false, // 树形表格不需要分页
                search: false, // 树形表格不需要搜索
                commonSearch: false,
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id'), sortable: true},
                        {field: 'title', title: __('Itemname'), align: 'left', formatter: Controller.api.formatter.title},
                        {field: 'itemintro', title: __('Itemintro'), align: 'left', formatter: function (value, row, index) {
                            return value ? (value.length > 30 ? value.substring(0, 30) + '...' : value) : '';
                        }},
                        {field: 'itemprice', title: __('Itemprice'), formatter: function (value, row, index) {
                            return value ? '¥' + value : '¥0';
                        }},
                        {field: 'itemtime', title: __('Itemtime'), formatter: function (value, row, index) {
                            if (!value) return '';
                            // 只显示时和分，不显示秒
                            var timeParts = value.split(':');
                            if (timeParts.length >= 2) {
                                return timeParts[0] + ':' + timeParts[1];
                            }
                            return value;
                        }},
                        {field: 'grade', title: __('Grade'), formatter: function (value, row, index) {
                            var gradeList = {
                                'parent': '<span class="label label-primary">' + __('Parent Project') + '</span>',
                                'son': '<span class="label label-success">' + __('Son Project') + '</span>'
                            };
                            return gradeList[value] || value;
                        }},
                        {field: 'clinicid', title: __('Clinicid'), formatter: function (value, row, index) {
                            if (!value) return '';
                            // 尝试从表格数据中查找诊所名称
                            var clinicName = '';
                            var tableData = $("#table").bootstrapTable('getData');
                            for (var i = 0; i < tableData.length; i++) {
                                if (tableData[i].clinicid == value && tableData[i].clinic_name) {
                                    clinicName = tableData[i].clinic_name;
                                    break;
                                }
                            }
                            return clinicName ? clinicName : 'ID: ' + value;
                        }},
                        {field: 'gradeid', title: __('Parent'), formatter: function (value, row, index) {
                            if (value == 0 || !value) {
                                return '<span class="text-muted">' + __('None') + '</span>';
                            } else {
                                // 尝试从表格数据中查找父级名称
                                var parentName = '';
                                var tableData = table.bootstrapTable('getData');
                                for (var i = 0; i < tableData.length; i++) {
                                    if (tableData[i].id == value) {
                                        parentName = tableData[i].itemname || tableData[i].title;
                                        break;
                                    }
                                }
                                return parentName ? '<span class="text-primary">' + parentName + '</span>' : 'ID: ' + value;
                            }
                        }},
                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                    ]
                ],
                // 树形表格配置
                rowAttributes: function (row, index) {
                    // 子级项目默认隐藏
                    return row.grade == 'son' ? {style: "display:none"} : {};
                }
            });

            // 为表格绑定事件
            Table.api.bindevent(table);

            // 当内容渲染完成后
            table.on('post-body.bs.table', function (e, settings, json, xhr) {
                // 显示隐藏子节点
                $(">tbody>tr[data-index] > td", this).on('click', "a.btn-node-sub", function () {
                    var status = $(this).data("shown") ? true : false;
                    var itemId = $(this).data("id");
                    
                    // 查找并切换所有子级项目
                    $("tr[data-index]").each(function() {
                        var $row = $(this);
                        var rowData = table.bootstrapTable('getData')[parseInt($row.attr('data-index'))];
                        if (rowData && rowData.gradeid == itemId) {
                            $row.toggle(!status);
                        }
                    });
                    
                    if (status) {
                        // 折叠时，同时折叠所有子级
                        $("a[data-pid='" + itemId + "']").trigger("collapse");
                    }
                    
                    $(this).data("shown", !status);
                    $("i", this).toggleClass("fa-caret-down").toggleClass("fa-caret-right");
                    return false;
                });
            });

            // 隐藏子节点
            $(document).on("collapse", ".btn-node-sub", function () {
                var itemId = $(this).data("id");
                // 查找并隐藏所有子级项目
                $("tr[data-index]").each(function() {
                    var $row = $(this);
                    var rowData = table.bootstrapTable('getData')[parseInt($row.attr('data-index'))];
                    if (rowData && rowData.gradeid == itemId) {
                        $row.hide();
                    }
                });
                
                if ($("i", this).length > 0) {
                    $("a[data-pid='" + itemId + "']").trigger("collapse");
                }
                $("i", this).removeClass("fa-caret-down").addClass("fa-caret-right");
                $(this).data("shown", false);
            });

            // 展开隐藏全部
            $(document.body).on("click", ".btn-toggle-all", function (e) {
                var that = this;
                var show = $("i", that).hasClass("fa-plus");
                $("i", that).toggleClass("fa-plus", !show).toggleClass("fa-minus", show);
                
                // 切换所有子级项目的显示状态
                $("tr[data-index]").each(function() {
                    var $row = $(this);
                    var rowData = table.bootstrapTable('getData')[parseInt($row.attr('data-index'))];
                    if (rowData && rowData.grade == 'son') {
                        $row.toggle(show);
                    }
                });
                
                $(".btn-node-sub").data("shown", show);
                $(".btn-node-sub > i").toggleClass("fa-caret-down", show).toggleClass("fa-caret-right", !show);
            });
        },
        add: function () {
            Controller.api.bindevent();
        },
        edit: function () {
            Controller.api.bindevent();
        },
        api: {
            formatter: {
                title: function (value, row, index) {
                    value = value.toString().replace(/(&|&amp;)nbsp;/g, '&nbsp;');
                    
                    // 为父级项目添加展开/折叠箭头
                    var caret = '';
                    if (row.grade == 'parent') {
                        // 检查是否有子级项目
                        var hasChild = false;
                        var tableData = $("#table").bootstrapTable('getData');
                        for (var i = 0; i < tableData.length; i++) {
                            if (tableData[i].gradeid == row.id) {
                                hasChild = true;
                                break;
                            }
                        }
                        if (hasChild) {
                            caret = '<i class="fa fa-caret-right"></i>';
                        }
                    }
                    
                    value = value.indexOf("&nbsp;") > -1 ? value.replace(/(.*)&nbsp;/, "$1" + caret) : caret + value;
                    
                    // 只有父级项目才添加链接和展开/折叠功能
                    if (row.grade == 'parent') {
                        return '<a href="javascript:;" data-id="' + row.id + '" data-pid="' + row.gradeid + '" class="btn-node-sub">' + value + '</a>';
                    } else {
                        // 子级项目直接返回文本，不添加链接
                        return value;
                    }
                }
            },
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
                
                // 父级选择联动（简化为两级）
                $('select[name="row[pid]"]').on('change', function () {
                    var pid = $(this).val();
                    var $gradeSelect = $('select[name="row[grade]"]');
                    var $clinicSelect = $('select[name="row[clinicid]"]');

                    if (pid > 0) {
                        // 如果有父级，自动设置为子级项目
                        $gradeSelect.val('son');
                        
                        // 获取父级项目的诊所ID并设置
                        // 首先尝试从表格数据获取
                        var tableData = $("#table").bootstrapTable('getData');
                        var parentClinicId = null;
                        
                        if (tableData && tableData.length > 0) {
                            // 从表格数据中查找
                            for (var i = 0; i < tableData.length; i++) {
                                if (tableData[i].id == pid) {
                                    parentClinicId = tableData[i].clinicid;
                                    break;
                                }
                            }
                        } else {
                            // 如果表格数据不可用，通过AJAX获取父级项目信息
                            $.ajax({
                                url: 'item/getParentInfo',
                                type: 'POST',
                                data: {id: pid},
                                dataType: 'json',
                                success: function(response) {
                                    if (response.code === 1) {
                                        $clinicSelect.val(response.data.clinicid);
                                        $clinicSelect.prop('disabled', true);
                                    }
                                },
                                error: function() {
                                    // 如果AJAX失败，至少禁用诊所选择
                                    $clinicSelect.prop('disabled', true);
                                }
                            });
                            return; // 等待AJAX完成
                        }
                        
                        if (parentClinicId) {
                            $clinicSelect.val(parentClinicId);
                        }
                        $clinicSelect.prop('disabled', true); // 禁用诊所选择
                    } else {
                        // 顶级项目，自动设置为父级项目
                        $gradeSelect.val('parent');
                        $clinicSelect.prop('disabled', false); // 启用诊所选择
                    }
                });
                
                // 页面加载时检查当前状态
                $(document).ready(function() {
                    var pid = $('select[name="row[pid]"]').val();
                    var $clinicSelect = $('select[name="row[clinicid]"]');
                    
                    if (pid > 0) {
                        // 如果是编辑子级项目，禁用诊所选择
                        $clinicSelect.prop('disabled', true);
                    }
                });
            }
        }
    };
    return Controller;
});
